package com.ssc.nav.utils

import com.ssc.nav.data.NavItem
import com.ssc.nav.extension.NavPluginExtension
import org.gradle.api.Project
import java.io.File

/**
 * user: jyt
 * DATA: 2024/9/10
 * TIME: 14:39
 */
object JavaCreateUtils {

    val NAV_NAME = "NavConstants"

    fun createNavIdClass(
        extension: NavPluginExtension,
        target: Project,
        map: MutableMap<String, NavItem>
    ) {


        // 动态生成Kotlin类的属性
        val properties = map.map { (key, value) ->
            if (value.navIgone != "true") {
                "val $key: Int = R.id.${key}"
            } else {
                ""
            }
        }.joinToString("\n    ")


        val mapKeyValue = map.map { (key, value) ->
            if (value.navIgone != "true") {
                "  \"${key}\" to R.id.${key} ,"
            } else {
                ""
            }
        }.joinToString("\n    ")


        val content = """
package ${extension.navPackageName}

import ${extension.navPackageName}.R
/**
* 这个文件是由navPlugin自动生成的，请勿修改，并且不要格式化
* 这个文件是由navPlugin自动生成的，请勿修改，并且不要格式化
* 这个文件是由navPlugin自动生成的，请勿修改，并且不要格式化
* 这个文件是由navPlugin自动生成的，请勿修改，并且不要格式化
**/
object $NAV_NAME {
    $properties
    
    val map = mapOf($mapKeyValue)
    
    fun getNavId(name: String): Int {
        return map[name] ?: -1
    }
    
}
""".trimIndent()

        /* val file = target.file("/src/main/java/com/ssc/businessbase/NavConstants.kt")
         FileWriter(file).use { fileWriter ->
             BufferedWriter(fileWriter).use { bufferedWriter ->
                 bufferedWriter.write(content)
             }
         }*/
        val targetDir = File(
            target.projectDir,
            "/src/main/java/"+extension.navPackageName.replace(".", "/")
        )

        // 确保目录存在
        if (!targetDir.exists()) {
            targetDir.mkdirs()
        }
        val kotlinFile = File(targetDir, "$NAV_NAME.kt")

        kotlinFile.writeText(content)
    }
}